home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / misc / amag / 9303b.lha / ARexx & Assembler / Listing3.asm < prev    next >
Assembly Source File  |  1993-02-25  |  3KB  |  130 lines

  1. * Programm: ARexx-Testport
  2. * Autoren: Alexander Kochann und Oliver Reiff
  3. * Assembler: DevPac II
  4. * Demo für einen eigenen ARexx-Port
  5. * Der Port wird nach A5 geschrieben
  6.  
  7. LN_NAME        equ      10
  8. rm_ARG0        equ      40
  9. CreateMsgPort  equ      -666
  10. DeleteMsgPort  equ      -672
  11. AddPort        equ      -354
  12. RemPort        equ      -360
  13. GetMsg         equ      -372
  14. ReplyMsg       equ      -378
  15. WaitPort       equ      -384
  16.  
  17.     move.l  4.w,a6
  18.     jsr     CreateMsgPort(a6)
  19.     tst.l   d0
  20. * Fehler
  21.     beq     Exit
  22.     move.l  d0,a5
  23.     lea     PortName,a0
  24. * Name eintragen
  25.     move.l  a0,LN_NAME(a5)
  26.     move.l  a5,a1
  27.     jsr     AddPort(a6)
  28. Loop
  29.     move.l  a5,a0
  30.     jsr     WaitPort(a6)
  31.     move.l  a5,a0
  32.     jsr     GetMsg(a6)
  33.     tst.l   d0
  34.     beq.s   Loop
  35.     move.l  d0,a2
  36.     move.l  rm_ARG0(a2),a0
  37.     lea     Ende_Text,a1
  38.     bsr     CompareStrings
  39.     beq.s   REXX_ENDE
  40.     lea     Flackern_Text,a1
  41.     bsr     CompareStrings
  42.     bgt.s   REXX_Flackern
  43. Reply
  44.     move.l  a2,a1
  45.     jsr     ReplyMsg(a6)
  46.     bra.s   Loop
  47. *---------------------------------
  48. REXX_ENDE
  49.     move.l  a2,a1
  50.     jsr     ReplyMsg(a6)
  51. Ende
  52.     move.l  4.w,a6
  53.     move.l  a5,a1
  54.     jsr     RemPort(a6)
  55.     move.l  a5,a0
  56.     jsr     DeleteMsgPort(a6)
  57. Exit
  58.     moveq   #0,d0
  59.     rts
  60. *--------------------------------
  61. REXX_Flackern
  62. .loop
  63. * nach 1. Argument suchen
  64.     cmp.b   #' ',(a0)+
  65.     bne.s   .loop
  66.     lea     Rot_Text,a1
  67.     bsr.s   CompareStrings
  68.     beq.s   .rot
  69.     lea     Grün_Text,a1
  70.     bsr.s   CompareStrings
  71.     beq.s   .grün
  72.     lea     Blau_Text,a1
  73.     bsr.s   CompareStrings
  74.     beq.s   .blau
  75.     bra.s   .ende
  76. .rot
  77.     move.w  #$f00,d0
  78.     bra.s   .flackern
  79. .grün
  80.     move.w  #$0f0,d0
  81.     bra.s   .flackern
  82. .blau
  83.     move.w  #$00f,d0
  84. .flackern
  85.     move.l  #$20000,d7
  86. .f_loop
  87. * FarbCode ins Hardwareregister
  88.     move.w  d0,($dff180).l
  89.     subq.l  #1,d7
  90.     bne.s   .f_loop
  91. .ende
  92.     bra.s   Reply
  93. *--------------------------------
  94. CompareStrings
  95.  
  96. * Rückgabewerte:
  97. * D0 =  0, Strings identisch, kein weiterer
  98. *    =  1, Strings identisch, danach SPACE
  99. *    = -1, Strings verschieden
  100.  
  101.     movem.l a0/a1,-(sp)
  102. .loop
  103.     cmp.b   (a0)+,(a1)+
  104.     bne.s   .space
  105.     tst.b   -1(a1)
  106.     bne.s   .loop
  107.     tst.b   -1(a0)
  108.     bne.s   .space
  109. .richtig
  110.     moveq   #0,d0
  111.     bra.s   .ende
  112. .space
  113.     cmp.b   #' ',-1(a0)
  114.     bne.s   .falsch
  115.     moveq   #1,d0
  116.     bra.s   .ende
  117. .falsch
  118.     moveq   #-1,d0
  119. .ende
  120.     movem.l (sp)+,a0/a1
  121.     rts
  122. *--------------------------------
  123. Ende_Text       dc.b 'CLOSETESTPORT',0
  124. Flackern_Text   dc.b 'FLACKERN',0
  125. Rot_Text        dc.b 'ROT',0
  126. Grün_Text       dc.b 'GRÜN',0
  127. Blau_Text       dc.b 'BLAU',0
  128. PortName        dc.b 'TEST_REXX',0
  129.     END
  130.